package cn.kongwg.juc;

import java.util.concurrent.TimeUnit;

/**
 * @author kongwg
 * @create 2021-04-26 12:30
 * <p>
 * 多线程8锁
 * * 1.  标准访问 Phone的邮件和短信功能  打印顺序不一定(决定权是操作系统)
 * * 2.  访问 Phone的邮件和短信功能 发邮件方法需要4秒 发短信方法不需要 则执行顺序是先邮件 再短信
 * * 3.  新增一个普通方法hello不加lock 先执行hello 再执行Email
 * * 4.  两部手机 一部发邮件 一部发短信  先短信 后邮件
 * * 5.  两个静态同步方法 同一部手机  先邮件 再短信
 * * 6.  两个静态同步方法 两部手机 一部发邮件 一部发短信 先邮件 再短信
 * * 7.  一个静态同步方法 一个非静态同步方法 一部手机 无论哪个方法是静态的 顺序都是先短信，后邮件
 * * 8.  一个静态同步方法 一个非静态同步方法 两部手机 无论哪个方法是静态的 顺序都是先短信，后邮件
 * *
 */

class Phone {
    public static synchronized void sendEmail() {
        try {
            TimeUnit.SECONDS.sleep(4);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("------Email");

    }

    public synchronized void sendSMS() {
        System.out.println("------SMS");
    }

    public void hello() {
        System.out.println("hello");
    }
}

public class Lock8 {
    public static void main(String[] args) throws InterruptedException {
        Phone phone = new Phone();
        Phone phone1 = new Phone();
        new Thread(() -> {
            phone.sendEmail();
        }, "A").start();

        Thread.sleep(1000);
        new Thread(() -> {
            phone1.sendSMS();
            //phone.hello();
            //phone.sendSMS();
        }, "B").start();
    }
}
